

cc.Class({
    extends: cc.Component,

    properties: {
        hitEffectPrefab: cc.Prefab,
        dustEffectPrefab: cc.Prefab,
        downEffectPrefab: cc.Prefab,
    },
    
    onLoad: function () {
        this.hitPool = new cc.NodePool();
        this.hitPool.put(cc.instantiate(this.hitEffectPrefab));
        this.dustPool = new cc.NodePool();
        this.dustPool.put(cc.instantiate(this.dustEffectPrefab));
        this.downPool = new cc.NodePool();
        this.downPool.put(cc.instantiate(this.downEffectPrefab));
    },

    createHit: function (pos, parent) {
        let clone = null;
        if (this.hitPool.size() > 0) { // 通过 size 接口判断对象池中是否有空闲的对象
            clone = this.hitPool.get();
        } else { // 如果没有空闲对象，也就是对象池中备用对象不够时，我们就用 cc.instantiate 重新创建
            clone = cc.instantiate(this.hitEffectPrefab);
        }
        clone.parent = parent; // 将生成的敌人加入节点树
        clone.setPosition(pos);

        clone.getComponent(cc.Animation).play('boom');
        //动画结束自动放入对象池.
        this.scheduleOnce(function() {
            // 这里的 this 指向 component
            this.onHitOver(clone);
        }, 0.6);
    },

    createDust: function (pos) {
        let clone = null;
        if (this.dustPool.size() > 0) { // 通过 size 接口判断对象池中是否有空闲的对象
            clone = this.dustPool.get();
        } else { // 如果没有空闲对象，也就是对象池中备用对象不够时，我们就用 cc.instantiate 重新创建
            clone = cc.instantiate(this.dustEffectPrefab);
        }
        clone.setPosition(pos);
        clone.parent = this.node;
        clone.getComponent(cc.Animation).play('dust');
        //动画结束自动放入对象池.
        this.scheduleOnce(function() {
            // 这里的 this 指向 component
            this.onDustOver(clone);
        }, 0.5);
    },

    createDown: function (pos, parent) {
        let clone = null;
        if (this.downPool.size() > 0) { // 通过 size 接口判断对象池中是否有空闲的对象
            clone = this.downPool.get();
        } else { // 如果没有空闲对象，也就是对象池中备用对象不够时，我们就用 cc.instantiate 重新创建
            clone = cc.instantiate(this.downEffectPrefab);
        }
        clone.setPosition(pos);
        clone.parent = parent;
        clone.getComponent(cc.Animation).play('down');
        //动画结束自动放入对象池.
        this.scheduleOnce(function() {
            // 这里的 this 指向 component
            this.onDownOver(clone);
        }, 0.3);
    },

    onHitOver: function (hit) {
        // enemy 应该是一个 cc.Node
        this.hitPool.put(hit); // 和初始化时的方法一样，将节点放进对象池，这个方法会同时调用节点的 removeFromParent
    },

    onDustOver: function(dust){
        this.dustPool.put(dust);
    },

    onDownOver: function(down){
        this.downPool.put(down);
    },

    // update (dt) {},
});
